package com.imooc.security.app;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;

/**
 * 6.2.5 app授权服务器配置
 * 加了这个等于把app定义成认证服务器。可以通过app获取token
 */
@Configuration
@EnableAuthorizationServer
/**
 * 6.2.6 测试访问：localhost:8060/oauth/authorize?response_type=code&client_id=30f54f19-d5e7-4d7e-a4fb-c4bbb9c33302&redirect_uri=http://example.com&scope=all
 * 启动项目，发现默认多了/oauth/authorize, /oauth/token这些url。
 * 控制台打印:security.oauth2.client.clientId = 30f54f19-d5e7-4d7e-a4fb-c4bbb9c33302 security.oauth2.client.secret = 6fba89e7-1961-4dcb-ad3d-de74ceeacba0
 * 
 * client_id：哪个应用在请求授权
 * 输入的用户名密码（test,123456）：哪个用户在请求授权
 * scope：给你什么授权
 * 
 * 6.2.9 测试访问：localhost:8060/oauth/authorize?response_type=code&client_id=imooc&redirect_uri=http://example.com&scope=all
 * code：example.com/?code=XfQ8SU
 * 
 * 【授权码模式】
 * 使用restlet client模拟第三方应用获取token
 * POST http://127.0.0.1:8060/oauth/token
 * HEADERS: 
 * Authorization : Basic aW1vb2M6aW1vb2NzZWNyZXQ= [ Basic Username imooc Password imoocsecret ]
 * Content-Type : application/x-www-form-urlencoded
 * BODY Form:
 * grant_type[Text]=authorization_code
 * client_id[Text]=imooc
 * code[Text]=XfQ8SU
 * redirect_uri[Text]=http://example.com
 * scope[Text]=all
 * 
 * 【密码模式】
 * 使用restlet client模拟第三方应用获取token
 * POST http://127.0.0.1:8060/oauth/token
 * HEADERS: 
 * Authorization : Basic aW1vb2M6aW1vb2NzZWNyZXQ= [ Basic Username imooc Password imoocsecret ]
 * Content-Type : application/x-www-form-urlencoded
 * BODY Form:
 * grant_type[Text]=password
 * username[Text]=imooc
 * password[Text]=imoocsecret
 * scope[Text]=all
 * 
 * 同一个用户，不同方式获取多次token，得到的是同一个
 */
/**
 * 6.3.1 springOauth源码解析
 * 先用restlet client模拟密码模式获取token的请求
 * TokenEndpoint 95
 * TokenEndpoint 132
 * CompositeTokenGranter 37
 * AbstractTokenGranter 59
 * AbstractTokenGranter 70
 * AbstractTokenGranter 74
 * ResourceOwnerPasswordTokenGranter 62
 * 
 * 重新用restlet client模拟密码模式获取token的请求
 * DefaultTokenServices 84
 */
public class ImoocAuthorizationServerConfig {

}
